//
//  HHOAuthViewController.swift
//  HHWeibo
//
//  Created by hehuafeng on 2017/2/24.
//  Copyright © 2017年 雷厉峰行. All rights reserved.
//

import UIKit
import SVProgressHUD

class HHOAuthViewController: UIViewController {
    
    /// webView属性
    var webView: UIWebView?
    
    override func loadView() {
        webView = UIWebView()
        view = webView
        
        // 设置背景颜色
        view.backgroundColor = UIColor.white
        
        // 取消webView滚动 - 新浪服务器默认返回的页面是全屏显示
        webView?.scrollView.isScrollEnabled = false
        
        // 1. 设置右边按钮
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "自动填充", style: .plain, target: self, action: #selector(autoFill))
        
        // 2. 设置左边按钮
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "返回", normalColor: UIColor.black, highlightedColor: UIColor.orange, target: self, action: #selector(close), isBack: true)
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        // 1. 加载登录界面
        showAuthorizeLogin()
        
        // 2. 设置webView代理
        webView?.delegate = self
    }
    
}

// MARK: - UIWebViewDelegate
extension HHOAuthViewController: UIWebViewDelegate {
    
    /// 是否允许webView加载
    ///
    /// - Parameters:
    ///   - webView: webView
    ///   - request: request
    ///   - navigationType: 导航类型
    /// - Returns: Bool
    func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
        // 1. 如果请求地址中包含 http://www.baidu.com 不加载页面 / 否则加载页面
        //    因为需要从返回的 "URL" 中 截取授权码 所以 不加载页面
        if request.url?.absoluteString.hasPrefix(HHRedirectURI) == false {
            return true
        }
        
        // 2. 从返回的回调地址中截取 “授权码”, 如果有授权码 表示授权成功
        // 否则, 授权失败
        if request.url?.query?.hasPrefix("code=") == false {
            print("取消授权")
            
            close()
            return false
        }
        
        // 3. 从 request.url?.query 字符串中截取 "授权码"
        // 注意: 经过上面两步判断, 到此处 query 字符串一定有值
        let code = (request.url?.query?.substring(from: "code=".startIndex))!
        
        // FIXME: 未完成
        // 4. 发送网络请求, 用 "授权码" 换取 accessToken
        
        
        return true
    }
    
    /// webView开始加载
    func webViewDidStartLoad(_ webView: UIWebView) {
        // 显示加载进度提示
        SVProgressHUD.show()
    }
    
    /// webView加载完毕
    func webViewDidFinishLoad(_ webView: UIWebView) {
        // 隐藏
        SVProgressHUD.dismiss()
    }
}

// MARK: - 请求授权
extension HHOAuthViewController {
    
    /// 加载授权请求登录界面
    func showAuthorizeLogin() {
        // 1. 创建访问地址
        let urlString = "https://api.weibo.com/oauth2/authorize?client_id=\(HHClientID)&redirect_uri=\(HHRedirectURI)"
        
        // 2. 创建URL
        guard let url = URL(string: urlString) else {
            return
        }
        
        // 3. 创建请求
        let request = URLRequest(url: url)
        
        // 4. webView加载请求
        webView?.loadRequest(request)
    }
    
    /// 退出登录控制器
    func close() {
        // 隐藏提示
        SVProgressHUD.dismiss()
        
        dismiss(animated: true, completion: nil)
    }
    
    /// 自动填充
    func autoFill() {
        // 1. 定义自动填充账号密码JS代码
        let js = "document.getElementById('userId').value = '13212680656';" + "document.getElementById('passwd').value = 'hehuafeng1994119';"
        
        
        // 2. 执行JS代码
        _ = webView?.stringByEvaluatingJavaScript(from: js)
    }
}
